home *** CD-ROM | disk | FTP | other *** search
/ PC/CD Gamer UK 120 / CD Gamer Issue 120 (March 2003) (Disc 2).ISO / mods / Q2_Codered / codeRED1_0.exe / Data1.cab / g_local.h < prev    next >
Encoding:
C/C++ Source or Header  |  2002-08-13  |  30.0 KB  |  1,154 lines

  1. /*
  2. Copyright (C) 1997-2001 Id Software, Inc.
  3.  
  4. This program is free software; you can redistribute it and/or
  5. modify it under the terms of the GNU General Public License
  6. as published by the Free Software Foundation; either version 2
  7. of the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  
  12.  
  13. See the GNU General Public License for more details.
  14.  
  15. You should have received a copy of the GNU General Public License
  16. along with this program; if not, write to the Free Software
  17. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  18.  
  19. */
  20. // g_local.h -- local definitions for game module
  21.  
  22. #include "q_shared.h"
  23.  
  24. // define GAME_INCLUDE so that game.h does not define the
  25. // short, server-visible gclient_t and edict_t structures,
  26. // because we define the full size ones in this file
  27. #define    GAME_INCLUDE
  28. #include "game.h"
  29.  
  30. //ZOID
  31. #include "p_menu.h"
  32. //ZOID
  33.  
  34. // the "gameversion" client command will print this plus compile date
  35. #define    GAMEVERSION    "baseq2"
  36.  
  37. // protocol bytes that can be directly added to messages
  38. #define    svc_muzzleflash        1
  39. #define    svc_muzzleflash2    2
  40. #define    svc_temp_entity        3
  41. #define    svc_layout            4
  42. #define    svc_inventory        5
  43.  
  44. //==================================================================
  45.  
  46. // view pitching times
  47. #define DAMAGE_TIME        0.5
  48. #define    FALL_TIME        0.3
  49.  
  50.  
  51. // edict->spawnflags
  52. // these are set with checkboxes on each entity in the map editor
  53. #define    SPAWNFLAG_NOT_EASY            0x00000100
  54. #define    SPAWNFLAG_NOT_MEDIUM        0x00000200
  55. #define    SPAWNFLAG_NOT_HARD            0x00000400
  56. #define    SPAWNFLAG_NOT_DEATHMATCH    0x00000800
  57. #define    SPAWNFLAG_NOT_COOP            0x00001000
  58.  
  59. // edict->flags
  60. #define    FL_FLY                    0x00000001
  61. #define    FL_SWIM                    0x00000002    // implied immunity to drowining
  62. #define FL_IMMUNE_LASER            0x00000004
  63. #define    FL_INWATER                0x00000008
  64. #define    FL_GODMODE                0x00000010
  65. #define    FL_NOTARGET                0x00000020
  66. #define FL_IMMUNE_SLIME            0x00000040
  67. #define FL_IMMUNE_LAVA            0x00000080
  68. #define    FL_PARTIALGROUND        0x00000100    // not all corners are valid
  69. #define    FL_WATERJUMP            0x00000200    // player jumping out of water
  70. #define    FL_TEAMSLAVE            0x00000400    // not the first on the team
  71. #define FL_NO_KNOCKBACK            0x00000800
  72. #define FL_POWER_ARMOR            0x00001000    // power armor (if any) is active
  73. #define FL_RESPAWN                0x80000000    // used for item respawning
  74.  
  75.  
  76. #define    FRAMETIME        0.1
  77.  
  78. // memory tags to allow dynamic memory to be cleaned up
  79. #define    TAG_GAME    765        // clear when unloading the dll
  80. #define    TAG_LEVEL    766        // clear when loading a new level
  81.  
  82.  
  83. #define MELEE_DISTANCE    80
  84.  
  85. #define BODY_QUEUE_SIZE        8
  86.  
  87. typedef enum
  88. {
  89.     DAMAGE_NO,
  90.     DAMAGE_YES,            // will take damage if hit
  91.     DAMAGE_AIM            // auto targeting recognizes this
  92. } damage_t;
  93.  
  94. typedef enum 
  95. {
  96.     WEAPON_READY, 
  97.     WEAPON_ACTIVATING,
  98.     WEAPON_DROPPING,
  99.     WEAPON_FIRING
  100. } weaponstate_t;
  101.  
  102. typedef enum
  103. {
  104.     AMMO_BULLETS,
  105.     AMMO_SHELLS,
  106.     AMMO_ROCKETS,
  107.     AMMO_GRENADES,
  108.     AMMO_CELLS,
  109.     AMMO_SLUGS
  110. } ammo_t;
  111.  
  112.  
  113. //deadflag
  114. #define DEAD_NO                    0
  115. #define DEAD_DYING                1
  116. #define DEAD_DEAD                2
  117. #define DEAD_RESPAWNABLE        3
  118.  
  119. //range
  120. #define RANGE_MELEE                0
  121. #define RANGE_NEAR                1
  122. #define RANGE_MID                2
  123. #define RANGE_FAR                3
  124.  
  125. //gib types
  126. #define GIB_ORGANIC                0
  127. #define GIB_METALLIC            1
  128.  
  129. //monster ai flags
  130. #define AI_STAND_GROUND            0x00000001
  131. #define AI_TEMP_STAND_GROUND    0x00000002
  132. #define AI_SOUND_TARGET            0x00000004
  133. #define AI_LOST_SIGHT            0x00000008
  134. #define AI_PURSUIT_LAST_SEEN    0x00000010
  135. #define AI_PURSUE_NEXT            0x00000020
  136. #define AI_PURSUE_TEMP            0x00000040
  137. #define AI_HOLD_FRAME            0x00000080
  138. #define AI_GOOD_GUY                0x00000100
  139. #define AI_BRUTAL                0x00000200
  140. #define AI_NOSTEP                0x00000400
  141. #define AI_DUCKED                0x00000800
  142. #define AI_COMBAT_POINT            0x00001000
  143. #define AI_MEDIC                0x00002000
  144. #define AI_RESURRECTING            0x00004000
  145.  
  146. //monster attack state
  147. #define AS_STRAIGHT                1
  148. #define AS_SLIDING                2
  149. #define    AS_MELEE                3
  150. #define    AS_MISSILE                4
  151.  
  152. // armor types
  153. #define ARMOR_NONE                0
  154. #define ARMOR_JACKET            1
  155. #define ARMOR_COMBAT            2
  156. #define ARMOR_BODY                3
  157. #define ARMOR_SHARD                4
  158.  
  159. // power armor types
  160. #define POWER_ARMOR_NONE        0
  161. #define POWER_ARMOR_SCREEN        1
  162. #define POWER_ARMOR_SHIELD        2
  163.  
  164. // handedness values
  165. #define RIGHT_HANDED            0
  166. #define LEFT_HANDED                1
  167. #define CENTER_HANDED            2
  168.  
  169.  
  170. // game.serverflags values
  171. #define SFL_CROSS_TRIGGER_1        0x00000001
  172. #define SFL_CROSS_TRIGGER_2        0x00000002
  173. #define SFL_CROSS_TRIGGER_3        0x00000004
  174. #define SFL_CROSS_TRIGGER_4        0x00000008
  175. #define SFL_CROSS_TRIGGER_5        0x00000010
  176. #define SFL_CROSS_TRIGGER_6        0x00000020
  177. #define SFL_CROSS_TRIGGER_7        0x00000040
  178. #define SFL_CROSS_TRIGGER_8        0x00000080
  179. #define SFL_CROSS_TRIGGER_MASK    0x000000ff
  180.  
  181.  
  182. // noise types for PlayerNoise
  183. #define PNOISE_SELF                0
  184. #define PNOISE_WEAPON            1
  185. #define PNOISE_IMPACT            2
  186.  
  187.  
  188. // edict->movetype values
  189. typedef enum
  190. {
  191. MOVETYPE_NONE,            // never moves
  192. MOVETYPE_NOCLIP,        // origin and angles change with no interaction
  193. MOVETYPE_PUSH,            // no clip to world, push on box contact
  194. MOVETYPE_STOP,            // no clip to world, stops on box contact
  195.  
  196. MOVETYPE_WALK,            // gravity
  197. MOVETYPE_STEP,            // gravity, special edge handling
  198. MOVETYPE_FLY,
  199. MOVETYPE_TOSS,            // gravity
  200. MOVETYPE_FLYMISSILE,    // extra size to monsters
  201. MOVETYPE_BOUNCE
  202. } movetype_t;
  203.  
  204.  
  205.  
  206. typedef struct
  207. {
  208.     int        base_count;
  209.     int        max_count;
  210.     float    normal_protection;
  211.     float    energy_protection;
  212.     int        armor;
  213. } gitem_armor_t;
  214.  
  215.  
  216. // gitem_t->flags
  217. #define    IT_WEAPON        1        // use makes active weapon
  218. #define    IT_AMMO            2
  219. #define IT_ARMOR        4
  220. #define IT_STAY_COOP    8
  221. #define IT_KEY            16
  222. #define IT_POWERUP        32
  223. //ZOID
  224. #define IT_TECH            64
  225. //ZOID
  226.  
  227. // gitem_t->weapmodel for weapons indicates model index
  228. #define WEAP_BLASTER            1 
  229. #define WEAP_SHOTGUN            2 
  230. #define WEAP_SUPERSHOTGUN        3 
  231. #define WEAP_MACHINEGUN            4 
  232. #define WEAP_CHAINGUN            5 
  233. #define WEAP_GRENADES            6 
  234. #define WEAP_GRENADELAUNCHER    7 
  235. #define WEAP_ROCKETLAUNCHER        8 
  236. #define WEAP_HYPERBLASTER        9 
  237. #define WEAP_RAILGUN            10
  238. #define WEAP_BFG                11
  239. #define WEAP_GRAPPLE            12
  240.  
  241. typedef struct gitem_s
  242. {
  243.     char        *classname;    // spawning name
  244.     qboolean    (*pickup)(struct edict_s *ent, struct edict_s *other);
  245.     void        (*use)(struct edict_s *ent, struct gitem_s *item);
  246.     void        (*drop)(struct edict_s *ent, struct gitem_s *item);
  247.     void        (*weaponthink)(struct edict_s *ent);
  248.     char        *pickup_sound;
  249.     char        *world_model;
  250.     int            world_model_flags;
  251.     char        *view_model;
  252.  
  253.     // client side info
  254.     char        *icon;
  255.     char        *pickup_name;    // for printing on pickup
  256.     int            count_width;        // number of digits to display by icon
  257.  
  258.     int            quantity;        // for ammo how much, for weapons how much is used per shot
  259.     char        *ammo;            // for weapons
  260.     int            flags;            // IT_* flags
  261.  
  262.     int            weapmodel;        // weapon model index (for weapons)
  263.  
  264.     void        *info;
  265.     int            tag;
  266.  
  267.     char        *precaches;        // string of all models, sounds, and images this item will use
  268. } gitem_t;
  269.  
  270.  
  271.  
  272. //
  273. // this structure is left intact through an entire game
  274. // it should be initialized at dll load time, and read/written to
  275. // the server.ssv file for savegames
  276. //
  277. typedef struct
  278. {
  279.     char        helpmessage1[512];
  280.     char        helpmessage2[512];
  281.     int            helpchanged;    // flash F1 icon if non 0, play sound
  282.                                 // and increment only if 1, 2, or 3
  283.  
  284.     gclient_t    *clients;        // [maxclients]
  285.  
  286.     // can't store spawnpoint in level, because
  287.     // it would get overwritten by the savegame restore
  288.     char        spawnpoint[512];    // needed for coop respawns
  289.  
  290.     // store latched cvars here that we want to get at often
  291.     int            maxclients;
  292.     int            maxentities;
  293.  
  294.     // cross level triggers
  295.     int            serverflags;
  296.  
  297.     // items
  298.     int            num_items;
  299.  
  300.     qboolean    autosaved;
  301. } game_locals_t;
  302.  
  303.  
  304. //
  305. // this structure is cleared as each map is entered
  306. // it is read/written to the level.sav file for savegames
  307. //
  308. typedef struct
  309. {
  310.     int            framenum;
  311.     float        time;
  312.  
  313.     char        level_name[MAX_QPATH];    // the descriptive name (Outer Base, etc)
  314.     char        mapname[MAX_QPATH];        // the server name (base1, etc)
  315.     char        nextmap[MAX_QPATH];        // go here when fraglimit is hit
  316.     char        forcemap[MAX_QPATH];    // go here
  317.  
  318.     // intermission state
  319.     float        intermissiontime;        // time the intermission was started
  320.     char        *changemap;
  321.     int            exitintermission;
  322.     vec3_t        intermission_origin;
  323.     vec3_t        intermission_angle;
  324.  
  325.     edict_t        *sight_client;    // changed once each frame for coop games
  326.  
  327.     edict_t        *sight_entity;
  328.     int            sight_entity_framenum;
  329.     edict_t        *sound_entity;
  330.     int            sound_entity_framenum;
  331.     edict_t        *sound2_entity;
  332.     int            sound2_entity_framenum;
  333.  
  334.     int            pic_health;
  335.  
  336.     int            total_secrets;
  337.     int            found_secrets;
  338.  
  339.     int            total_goals;
  340.     int            found_goals;
  341.  
  342.     int            total_monsters;
  343.     int            killed_monsters;
  344.  
  345.     edict_t        *current_entity;    // entity running from G_RunFrame
  346.     int            body_que;            // dead bodies
  347.  
  348.     int            power_cubes;        // ugly necessity for coop
  349. } level_locals_t;
  350.  
  351.  
  352. // spawn_temp_t is only used to hold entity field values that
  353. // can be set from the editor, but aren't actualy present
  354. // in edict_t during gameplay
  355. typedef struct
  356. {
  357.     // world vars
  358.     char        *sky;
  359.     float        skyrotate;
  360.     vec3_t        skyaxis;
  361.     char        *nextmap;
  362.  
  363.     int            lip;
  364.     int            distance;
  365.     int            height;
  366.     char        *noise;
  367.     float        pausetime;
  368.     char        *item;
  369.     char        *gravity;
  370.  
  371.     float        minyaw;
  372.     float        maxyaw;
  373.     float        minpitch;
  374.     float        maxpitch;
  375. } spawn_temp_t;
  376.  
  377.  
  378. typedef struct
  379. {
  380.     // fixed data
  381.     vec3_t        start_origin;
  382.     vec3_t        start_angles;
  383.     vec3_t        end_origin;
  384.     vec3_t        end_angles;
  385.  
  386.     int            sound_start;
  387.     int            sound_middle;
  388.     int            sound_end;
  389.  
  390.     float        accel;
  391.     float        speed;
  392.     float        decel;
  393.     float        distance;
  394.  
  395.     float        wait;
  396.  
  397.     // state data
  398.     int            state;
  399.     vec3_t        dir;
  400.     float        current_speed;
  401.     float        move_speed;
  402.     float        next_speed;
  403.     float        remaining_distance;
  404.     float        decel_distance;
  405.     void        (*endfunc)(edict_t *);
  406. } moveinfo_t;
  407.  
  408.  
  409. typedef struct
  410. {
  411.     void    (*aifunc)(edict_t *self, float dist);
  412.     float    dist;
  413.     void    (*thinkfunc)(edict_t *self);
  414. } mframe_t;
  415.  
  416. typedef struct
  417. {
  418.     int            firstframe;
  419.     int            lastframe;
  420.     mframe_t    *frame;
  421.     void        (*endfunc)(edict_t *self);
  422. } mmove_t;
  423.  
  424. typedef struct
  425. {
  426.     mmove_t        *currentmove;
  427.     int            aiflags;
  428.     int            nextframe;
  429.     float        scale;
  430.  
  431.     void        (*stand)(edict_t *self);
  432.     void        (*idle)(edict_t *self);
  433.     void        (*search)(edict_t *self);
  434.     void        (*walk)(edict_t *self);
  435.     void        (*run)(edict_t *self);
  436.     void        (*dodge)(edict_t *self, edict_t *other, float eta);
  437.     void        (*attack)(edict_t *self);
  438.     void        (*melee)(edict_t *self);
  439.     void        (*sight)(edict_t *self, edict_t *other);
  440.     qboolean    (*checkattack)(edict_t *self);
  441.  
  442.     float        pausetime;
  443.     float        attack_finished;
  444.  
  445.     vec3_t        saved_goal;
  446.     float        search_time;
  447.     float        trail_time;
  448.     vec3_t        last_sighting;
  449.     int            attack_state;
  450.     int            lefty;
  451.     float        idle_time;
  452.     int            linkcount;
  453.  
  454.     int            power_armor_type;
  455.     int            power_armor_power;
  456. } monsterinfo_t;
  457.  
  458.  
  459.  
  460. extern    game_locals_t    game;
  461. extern    level_locals_t    level;
  462. extern    game_import_t    gi;
  463. extern    game_export_t    globals;
  464. extern    spawn_temp_t    st;
  465.  
  466. extern    int    sm_meat_index;
  467. extern    int    snd_fry;
  468.  
  469. extern    int    jacket_armor_index;
  470. extern    int    combat_armor_index;
  471. extern    int    body_armor_index;
  472.  
  473.  
  474. // means of death
  475. #define MOD_UNKNOWN            0
  476. #define MOD_BLASTER            1
  477. #define MOD_SHOTGUN            2
  478. #define MOD_SSHOTGUN        3
  479. #define MOD_MACHINEGUN        4
  480. #define MOD_CHAINGUN        5
  481. #define MOD_GRENADE            6
  482. #define MOD_G_SPLASH        7
  483. #define MOD_ROCKET            8
  484. #define MOD_R_SPLASH        9
  485. #define MOD_HYPERBLASTER    10
  486. #define MOD_RAILGUN            11
  487. #define MOD_BFG_LASER        12
  488. #define MOD_BFG_BLAST        13
  489. #define MOD_BFG_EFFECT        14
  490. #define MOD_HANDGRENADE        15
  491. #define MOD_HG_SPLASH        16
  492. #define MOD_WATER            17
  493. #define MOD_SLIME            18
  494. #define MOD_LAVA            19
  495. #define MOD_CRUSH            20
  496. #define MOD_TELEFRAG        21
  497. #define MOD_FALLING            22
  498. #define MOD_SUICIDE            23
  499. #define MOD_HELD_GRENADE    24
  500. #define MOD_EXPLOSIVE        25
  501. #define MOD_BARREL            26
  502. #define MOD_BOMB            27
  503. #define MOD_EXIT            28
  504. #define MOD_SPLASH            29
  505. #define MOD_TARGET_LASER    30
  506. #define MOD_TRIGGER_HURT    31
  507. #define MOD_HIT                32
  508. #define MOD_TARGET_BLASTER    33
  509. #define MOD_GRAPPLE            34
  510. #define MOD_FRIENDLY_FIRE    0x8000000
  511.  
  512. extern    int    meansOfDeath;
  513.  
  514.  
  515. extern    edict_t            *g_edicts;
  516.  
  517. #define    FOFS(x) (int)&(((edict_t *)0)->x)
  518. #define    STOFS(x) (int)&(((spawn_temp_t *)0)->x)
  519. #define    LLOFS(x) (int)&(((level_locals_t *)0)->x)
  520. #define    CLOFS(x) (int)&(((gclient_t *)0)->x)
  521.  
  522. #define random()    ((rand () & 0x7fff) / ((float)0x7fff))
  523. #define crandom()    (2.0 * (random() - 0.5))
  524.  
  525. extern    cvar_t    *maxentities;
  526. extern    cvar_t    *deathmatch;
  527. extern    cvar_t    *coop;
  528. extern    cvar_t    *dmflags;
  529. extern    cvar_t    *skill;
  530. extern    cvar_t    *fraglimit;
  531. extern    cvar_t    *timelimit;
  532. //ZOID
  533. extern    cvar_t    *capturelimit;
  534. extern    cvar_t    *instantweap;
  535. //ZOID
  536. extern    cvar_t    *password;
  537. extern    cvar_t    *g_select_empty;
  538. extern    cvar_t    *dedicated;
  539.  
  540. extern    cvar_t    *filterban;
  541.  
  542. extern    cvar_t    *sv_gravity;
  543. extern    cvar_t    *sv_maxvelocity;
  544.  
  545. extern    cvar_t    *gun_x, *gun_y, *gun_z;
  546. extern    cvar_t    *sv_rollspeed;
  547. extern    cvar_t    *sv_rollangle;
  548.  
  549. extern    cvar_t    *run_pitch;
  550. extern    cvar_t    *run_roll;
  551. extern    cvar_t    *bob_up;
  552. extern    cvar_t    *bob_pitch;
  553. extern    cvar_t    *bob_roll;
  554.  
  555. extern    cvar_t    *sv_cheats;
  556. extern    cvar_t    *maxclients;
  557.  
  558. extern    cvar_t    *flood_msgs;
  559. extern    cvar_t    *flood_persecond;
  560. extern    cvar_t    *flood_waitdelay;
  561.  
  562. extern    cvar_t    *sv_maplist;
  563.  
  564. //ZOID
  565. extern    qboolean    is_quad;
  566. //ZOID
  567.  
  568. #define world    (&g_edicts[0])
  569.  
  570. // item spawnflags
  571. #define ITEM_TRIGGER_SPAWN        0x00000001
  572. #define ITEM_NO_TOUCH            0x00000002
  573. // 6 bits reserved for editor flags
  574. // 8 bits used as power cube id bits for coop games
  575. #define DROPPED_ITEM            0x00010000
  576. #define    DROPPED_PLAYER_ITEM        0x00020000
  577. #define ITEM_TARGETS_USED        0x00040000
  578.  
  579. //
  580. // fields are needed for spawning from the entity string
  581. // and saving / loading games
  582. //
  583. #define FFL_SPAWNTEMP        1
  584.  
  585. typedef enum {
  586.     F_INT, 
  587.     F_FLOAT,
  588.     F_LSTRING,            // string on disk, pointer in memory, TAG_LEVEL
  589.     F_GSTRING,            // string on disk, pointer in memory, TAG_GAME
  590.     F_VECTOR,
  591.     F_ANGLEHACK,
  592.     F_EDICT,            // index on disk, pointer in memory
  593.     F_ITEM,                // index on disk, pointer in memory
  594.     F_CLIENT,            // index on disk, pointer in memory
  595.     F_IGNORE
  596. } fieldtype_t;
  597.  
  598. typedef struct
  599. {
  600.     char    *name;
  601.     int        ofs;
  602.     fieldtype_t    type;
  603.     int        flags;
  604. } field_t;
  605.  
  606.  
  607. extern    field_t fields[];
  608. extern    gitem_t    itemlist[];
  609.  
  610.  
  611. //
  612. // g_cmds.c
  613. //
  614. qboolean CheckFlood(edict_t *ent);
  615. void Cmd_Help_f (edict_t *ent);
  616. void Cmd_Score_f (edict_t *ent);
  617.  
  618. //
  619. // g_items.c
  620. //
  621. void PrecacheItem (gitem_t *it);
  622. void InitItems (void);
  623. void SetItemNames (void);
  624. gitem_t    *FindItem (char *pickup_name);
  625. gitem_t    *FindItemByClassname (char *classname);
  626. #define    ITEM_INDEX(x) ((x)-itemlist)
  627. edict_t *Drop_Item (edict_t *ent, gitem_t *item);
  628. void SetRespawn (edict_t *ent, float delay);
  629. void ChangeWeapon (edict_t *ent);
  630. void SpawnItem (edict_t *ent, gitem_t *item);
  631. void Think_Weapon (edict_t *ent);
  632. int ArmorIndex (edict_t *ent);
  633. int PowerArmorType (edict_t *ent);
  634. gitem_t    *GetItemByIndex (int index);
  635. qboolean Add_Ammo (edict_t *ent, gitem_t *item, int count);
  636. void Touch_Item (edict_t *ent, edict_t *other, cplane_t *plane, csurface_t *surf);
  637.  
  638. //
  639. // g_utils.c
  640. //
  641. qboolean    KillBox (edict_t *ent);
  642. void    G_ProjectSource (vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
  643. edict_t *G_Find (edict_t *from, int fieldofs, char *match);
  644. edict_t *findradius (edict_t *from, vec3_t org, float rad);
  645. edict_t *G_PickTarget (char *targetname);
  646. void    G_UseTargets (edict_t *ent, edict_t *activator);
  647. void    G_SetMovedir (vec3_t angles, vec3_t movedir);
  648.  
  649. void    G_InitEdict (edict_t *e);
  650. edict_t    *G_Spawn (void);
  651. void    G_FreeEdict (edict_t *e);
  652.  
  653. void    G_TouchTriggers (edict_t *ent);
  654. void    G_TouchSolids (edict_t *ent);
  655.  
  656. char    *G_CopyString (char *in);
  657.  
  658. float    *tv (float x, float y, float z);
  659. char    *vtos (vec3_t v);
  660.  
  661. float vectoyaw (vec3_t vec);
  662. void vectoangles (vec3_t vec, vec3_t angles);
  663.  
  664. //
  665. // g_combat.c
  666. //
  667. qboolean OnSameTeam (edict_t *ent1, edict_t *ent2);
  668. qboolean CanDamage (edict_t *targ, edict_t *inflictor);
  669. qboolean CheckTeamDamage (edict_t *targ, edict_t *attacker);
  670. void T_Damage (edict_t *targ, edict_t *inflictor, edict_t *attacker, vec3_t dir, vec3_t point, vec3_t normal, int damage, int knockback, int dflags, int mod);
  671. void T_RadiusDamage (edict_t *inflictor, edict_t *attacker, float damage, edict_t *ignore, float radius, int mod);
  672.  
  673. // damage flags
  674. #define DAMAGE_RADIUS            0x00000001    // damage was indirect
  675. #define DAMAGE_NO_ARMOR            0x00000002    // armour does not protect from this damage
  676. #define DAMAGE_ENERGY            0x00000004    // damage is from an energy based weapon
  677. #define DAMAGE_NO_KNOCKBACK        0x00000008    // do not affect velocity, just view angles
  678. #define DAMAGE_BULLET            0x00000010  // damage is from a bullet (used for ricochets)
  679. #define DAMAGE_NO_PROTECTION    0x00000020  // armor, shields, invulnerability, and godmode have no effect
  680.  
  681. #define DEFAULT_BULLET_HSPREAD    300
  682. #define DEFAULT_BULLET_VSPREAD    500
  683. #define DEFAULT_SHOTGUN_HSPREAD    1000
  684. #define DEFAULT_SHOTGUN_VSPREAD    500
  685. #define DEFAULT_DEATHMATCH_SHOTGUN_COUNT    12
  686. #define DEFAULT_SHOTGUN_COUNT    12
  687. #define DEFAULT_SSHOTGUN_COUNT    20
  688.  
  689. //
  690. // g_monster.c
  691. //
  692. void monster_fire_bullet (edict_t *self, vec3_t start, vec3_t dir, int damage, int kick, int hspread, int vspread, int flashtype);
  693. void monster_fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int flashtype);
  694. void monster_fire_blaster (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype, int effect);
  695. void monster_fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int flashtype);
  696. void monster_fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, int flashtype);
  697. void monster_fire_railgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int flashtype);
  698. void monster_fire_bfg (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int kick, float damage_radius, int flashtype);
  699. void M_droptofloor (edict_t *ent);
  700. void monster_think (edict_t *self);
  701. void walkmonster_start (edict_t *self);
  702. void swimmonster_start (edict_t *self);
  703. void flymonster_start (edict_t *self);
  704. void AttackFinished (edict_t *self, float time);
  705. void monster_death_use (edict_t *self);
  706. void M_CatagorizePosition (edict_t *ent);
  707. qboolean M_CheckAttack (edict_t *self);
  708. void M_FlyCheck (edict_t *self);
  709. void M_CheckGround (edict_t *ent);
  710.  
  711. //
  712. // g_misc.c
  713. //
  714. void ThrowHead (edict_t *self, char *gibname, int damage, int type);
  715. void ThrowClientHead (edict_t *self, int damage);
  716. void ThrowGib (edict_t *self, char *gibname, int damage, int type);
  717. void BecomeExplosion1(edict_t *self);
  718.  
  719. //
  720. // g_ai.c
  721. //
  722. void AI_SetSightClient (void);
  723.  
  724. void ai_stand (edict_t *self, float dist);
  725. void ai_move (edict_t *self, float dist);
  726. void ai_walk (edict_t *self, float dist);
  727. void ai_turn (edict_t *self, float dist);
  728. void ai_run (edict_t *self, float dist);
  729. void ai_charge (edict_t *self, float dist);
  730. int range (edict_t *self, edict_t *other);
  731.  
  732. void FoundTarget (edict_t *self);
  733. qboolean infront (edict_t *self, edict_t *other);
  734. qboolean visible (edict_t *self, edict_t *other);
  735. qboolean FacingIdeal(edict_t *self);
  736.  
  737. //
  738. // g_weapon.c
  739. //
  740. void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin);
  741. qboolean fire_hit (edict_t *self, vec3_t aim, int damage, int kick);
  742. void fire_bullet (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int mod);
  743. void fire_shotgun (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick, int hspread, int vspread, int count, int mod);
  744. void fire_blaster (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, int effect, qboolean hyper);
  745. void fire_grenade (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius);
  746. void fire_grenade2 (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int speed, float timer, float damage_radius, qboolean held);
  747. void fire_rocket (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius, int radius_damage);
  748. void fire_rail (edict_t *self, vec3_t start, vec3_t aimdir, int damage, int kick);
  749. void fire_bfg (edict_t *self, vec3_t start, vec3_t dir, int damage, int speed, float damage_radius);
  750.  
  751. //
  752. // g_ptrail.c
  753. //
  754. void PlayerTrail_Init (void);
  755. void PlayerTrail_Add (vec3_t spot);
  756. void PlayerTrail_New (vec3_t spot);
  757. edict_t *PlayerTrail_PickFirst (edict_t *self);
  758. edict_t *PlayerTrail_PickNext (edict_t *self);
  759. edict_t    *PlayerTrail_LastSpot (void);
  760.  
  761.  
  762. //
  763. // g_client.c
  764. //
  765. void respawn (edict_t *ent);
  766. void BeginIntermission (edict_t *targ);
  767. void PutClientInServer (edict_t *ent);
  768. void InitClientPersistant (gclient_t *client);
  769. void InitClientResp (gclient_t *client);
  770. void InitBodyQue (void);
  771. void ClientBeginServerFrame (edict_t *ent);
  772. void ClientUserinfoChanged (edict_t *ent, char *userinfo);
  773.  
  774. //
  775. // g_player.c
  776. //
  777. void player_pain (edict_t *self, edict_t *other, float kick, int damage);
  778. void player_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
  779.  
  780. //
  781. // g_svcmds.c
  782. //
  783. void    ServerCommand (void);
  784.  
  785. //
  786. // p_view.c
  787. //
  788. void ClientEndServerFrame (edict_t *ent);
  789.  
  790. //
  791. // p_hud.c
  792. //
  793. void MoveClientToIntermission (edict_t *client);
  794. void G_SetStats (edict_t *ent);
  795. void ValidateSelectedItem (edict_t *ent);
  796. void DeathmatchScoreboardMessage (edict_t *client, edict_t *killer);
  797.  
  798. //
  799. // g_pweapon.c
  800. //
  801. void PlayerNoise(edict_t *who, vec3_t where, int type);
  802. void P_ProjectSource (gclient_t *client, vec3_t point, vec3_t distance, vec3_t forward, vec3_t right, vec3_t result);
  803. void Weapon_Generic (edict_t *ent, int FRAME_ACTIVATE_LAST, int FRAME_FIRE_LAST, int FRAME_IDLE_LAST, int FRAME_DEACTIVATE_LAST, int *pause_frames, int *fire_frames, void (*fire)(edict_t *ent));
  804.  
  805. //
  806. // m_move.c
  807. //
  808. qboolean M_CheckBottom (edict_t *ent);
  809. qboolean M_walkmove (edict_t *ent, float yaw, float dist);
  810. void M_MoveToGoal (edict_t *ent, float dist);
  811. void M_ChangeYaw (edict_t *ent);
  812.  
  813. //
  814. // g_phys.c
  815. //
  816. void G_RunEntity (edict_t *ent);
  817.  
  818. //
  819. // g_main.c
  820. //
  821. void SaveClientData (void);
  822. void FetchClientEntData (edict_t *ent);
  823. void EndDMLevel (void);
  824.  
  825. //
  826. // g_svcmds.c
  827. //
  828. qboolean SV_FilterPacket (char *from);
  829.  
  830. //============================================================================
  831.  
  832. // client_t->anim_priority
  833. #define    ANIM_BASIC        0        // stand / run
  834. #define    ANIM_WAVE        1
  835. #define    ANIM_JUMP        2
  836. #define    ANIM_PAIN        3
  837. #define    ANIM_ATTACK        4
  838. #define    ANIM_DEATH        5
  839. #define    ANIM_REVERSE    6
  840.  
  841.  
  842. // client data that stays across multiple level loads
  843. typedef struct
  844. {
  845.     char        userinfo[MAX_INFO_STRING];
  846.     char        netname[16];
  847.     int            hand;
  848.  
  849.     qboolean    connected;            // a loadgame will leave valid entities that
  850.                                     // just don't have a connection yet
  851.  
  852.     // values saved and restored from edicts when changing levels
  853.     int            health;
  854.     int            max_health;
  855.     int            savedFlags;
  856.  
  857.     int            selected_item;
  858.     int            inventory[MAX_ITEMS];
  859.  
  860.     // ammo capacities
  861.     int            max_bullets;
  862.     int            max_shells;
  863.     int            max_rockets;
  864.     int            max_grenades;
  865.     int            max_cells;
  866.     int            max_slugs;
  867.  
  868.     gitem_t        *weapon;
  869.     gitem_t        *lastweapon;
  870.  
  871.     int            power_cubes;    // used for tracking the cubes in coop games
  872.     int            score;            // for calculating total unit score in coop games
  873. } client_persistant_t;
  874.  
  875. // client data that stays across deathmatch respawns
  876. typedef struct
  877. {
  878.     client_persistant_t    coop_respawn;    // what to set client->pers to on a respawn
  879.     int            enterframe;            // level.framenum the client entered the game
  880.     int            score;                // frags, etc
  881. //ZOID
  882.     int            ctf_team;            // CTF team
  883.     int            ctf_state;
  884.     float        ctf_lasthurtcarrier;
  885.     float        ctf_lastreturnedflag;
  886.     float        ctf_flagsince;
  887.     float        ctf_lastfraggedcarrier;
  888.     qboolean    id_state;
  889.     float        lastidtime;
  890.     qboolean    voted; // for elections
  891.     qboolean    ready;
  892.     qboolean    admin;
  893.     struct ghost_s *ghost; // for ghost codes
  894. //ZOID
  895.     vec3_t        cmd_angles;            // angles sent over in the last command
  896.     int            game_helpchanged;
  897.     int            helpchanged;
  898. } client_respawn_t;
  899.  
  900. // this structure is cleared on each PutClientInServer(),
  901. // except for 'client->pers'
  902. struct gclient_s
  903. {
  904.     // known to server
  905.     player_state_t    ps;                // communicated by server to clients
  906.     int                ping;
  907.  
  908.     // private to game
  909.     client_persistant_t    pers;
  910.     client_respawn_t    resp;
  911.     pmove_state_t        old_pmove;    // for detecting out-of-pmove changes
  912.  
  913.     qboolean    showscores;            // set layout stat
  914. //ZOID
  915.     qboolean    inmenu;                // in menu
  916.     pmenuhnd_t    *menu;                // current menu
  917. //ZOID
  918.     qboolean    showinventory;        // set layout stat
  919.     qboolean    showhelp;
  920.     qboolean    showhelpicon;
  921.  
  922.     int            ammo_index;
  923.  
  924.     int            buttons;
  925.     int            oldbuttons;
  926.     int            latched_buttons;
  927.  
  928.     qboolean    weapon_thunk;
  929.  
  930.     gitem_t        *newweapon;
  931.  
  932.     // sum up damage over an entire frame, so
  933.     // shotgun blasts give a single big kick
  934.     int            damage_armor;        // damage absorbed by armor
  935.     int            damage_parmor;        // damage absorbed by power armor
  936.     int            damage_blood;        // damage taken out of health
  937.     int            damage_knockback;    // impact damage
  938.     vec3_t        damage_from;        // origin for vector calculation
  939.  
  940.     float        killer_yaw;            // when dead, look at killer
  941.  
  942.     weaponstate_t    weaponstate;
  943.     vec3_t        kick_angles;    // weapon kicks
  944.     vec3_t        kick_origin;
  945.     float        v_dmg_roll, v_dmg_pitch, v_dmg_time;    // damage kicks
  946.     float        fall_time, fall_value;        // for view drop on fall
  947.     float        damage_alpha;
  948.     float        bonus_alpha;
  949.     vec3_t        damage_blend;
  950.     vec3_t        v_angle;            // aiming direction
  951.     float        bobtime;            // so off-ground doesn't change it
  952.     vec3_t        oldviewangles;
  953.     vec3_t        oldvelocity;
  954.  
  955.     float        next_drown_time;
  956.     int            old_waterlevel;
  957.     int            breather_sound;
  958.  
  959.     int            machinegun_shots;    // for weapon raising
  960.  
  961.     // animation vars
  962.     int            anim_end;
  963.     int            anim_priority;
  964.     qboolean    anim_duck;
  965.     qboolean    anim_run;
  966.  
  967.     // powerup timers
  968.     float        quad_framenum;
  969.     float        invincible_framenum;
  970.     float        breather_framenum;
  971.     float        enviro_framenum;
  972.  
  973.     qboolean    grenade_blew_up;
  974.     float        grenade_time;
  975.     int            silencer_shots;
  976.     int            weapon_sound;
  977.  
  978.     float        pickup_msg_time;
  979.  
  980.     float        flood_locktill;        // locked from talking
  981.     float        flood_when[10];        // when messages were said
  982.     int            flood_whenhead;        // head pointer for when said
  983.  
  984.     float        respawn_time;        // can respawn when time > this
  985.  
  986. //ZOID
  987.     void        *ctf_grapple;        // entity of grapple
  988.     int            ctf_grapplestate;        // true if pulling
  989.     float        ctf_grapplereleasetime;    // time of grapple release
  990.     float        ctf_regentime;        // regen tech
  991.     float        ctf_techsndtime;
  992.     float        ctf_lasttechmsg;
  993.     edict_t        *chase_target;
  994.     qboolean    update_chase;
  995.     float        menutime;            // time to update menu
  996.     qboolean    menudirty;
  997. //ZOID
  998. };
  999.  
  1000.  
  1001. struct edict_s
  1002. {
  1003.     entity_state_t    s;
  1004.     struct gclient_s    *client;    // NULL if not a player
  1005.                                     // the server expects the first part
  1006.                                     // of gclient_s to be a player_state_t
  1007.                                     // but the rest of it is opaque
  1008.  
  1009.     qboolean    inuse;
  1010.     int            linkcount;
  1011.  
  1012.     // FIXME: move these fields to a server private sv_entity_t
  1013.     link_t        area;                // linked to a division node or leaf
  1014.     
  1015.     int            num_clusters;        // if -1, use headnode instead
  1016.     int            clusternums[MAX_ENT_CLUSTERS];
  1017.     int            headnode;            // unused if num_clusters != -1
  1018.     int            areanum, areanum2;
  1019.  
  1020.     //================================
  1021.  
  1022.     int            svflags;
  1023.     vec3_t        mins, maxs;
  1024.     vec3_t        absmin, absmax, size;
  1025.     solid_t        solid;
  1026.     int            clipmask;
  1027.     edict_t        *owner;
  1028.  
  1029.  
  1030.     // DO NOT MODIFY ANYTHING ABOVE THIS, THE SERVER
  1031.     // EXPECTS THE FIELDS IN THAT ORDER!
  1032.  
  1033.     //================================
  1034.     int            movetype;
  1035.     int            flags;
  1036.  
  1037.     char        *model;
  1038.     float        freetime;            // sv.time when the object was freed
  1039.     
  1040.     //
  1041.     // only used locally in game, not by server
  1042.     //
  1043.     char        *message;
  1044.     char        *classname;
  1045.     int            spawnflags;
  1046.  
  1047.     float        timestamp;
  1048.  
  1049.     float        angle;            // set in qe3, -1 = up, -2 = down
  1050.     char        *target;
  1051.     char        *targetname;
  1052.     char        *killtarget;
  1053.     char        *team;
  1054.     char        *pathtarget;
  1055.     char        *deathtarget;
  1056.     char        *combattarget;
  1057.     edict_t        *target_ent;
  1058.  
  1059.     float        speed, accel, decel;
  1060.     vec3_t        movedir;
  1061.     vec3_t        pos1, pos2;
  1062.  
  1063.     vec3_t        velocity;
  1064.     vec3_t        avelocity;
  1065.     int            mass;
  1066.     float        air_finished;
  1067.     float        gravity;        // per entity gravity multiplier (1.0 is normal)
  1068.                                 // use for lowgrav artifact, flares
  1069.  
  1070.     edict_t        *goalentity;
  1071.     edict_t        *movetarget;
  1072.     float        yaw_speed;
  1073.     float        ideal_yaw;
  1074.  
  1075.     float        nextthink;
  1076.     void        (*prethink) (edict_t *ent);
  1077.     void        (*think)(edict_t *self);
  1078.     void        (*blocked)(edict_t *self, edict_t *other);    //move to moveinfo?
  1079.     void        (*touch)(edict_t *self, edict_t *other, cplane_t *plane, csurface_t *surf);
  1080.     void        (*use)(edict_t *self, edict_t *other, edict_t *activator);
  1081.     void        (*pain)(edict_t *self, edict_t *other, float kick, int damage);
  1082.     void        (*die)(edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point);
  1083.  
  1084.     float        touch_debounce_time;        // are all these legit?  do we need more/less of them?
  1085.     float        pain_debounce_time;
  1086.     float        damage_debounce_time;
  1087.     float        fly_sound_debounce_time;    //move to clientinfo
  1088.     float        last_move_time;
  1089.  
  1090.     int            health;
  1091.     int            max_health;
  1092.     int            gib_health;
  1093.     int            deadflag;
  1094.     qboolean    show_hostile;
  1095.  
  1096.     float        powerarmor_time;
  1097.  
  1098.     char        *map;            // target_changelevel
  1099.  
  1100.     int            viewheight;        // height above origin where eyesight is determined
  1101.     int            takedamage;
  1102.     int            dmg;
  1103.     int            radius_dmg;
  1104.     float        dmg_radius;
  1105.     int            sounds;            //make this a spawntemp var?
  1106.     int            count;
  1107.  
  1108.     edict_t        *chain;
  1109.     edict_t        *enemy;
  1110.     edict_t        *oldenemy;
  1111.     edict_t        *activator;
  1112.     edict_t        *groundentity;
  1113.     int            groundentity_linkcount;
  1114.     edict_t        *teamchain;
  1115.     edict_t        *teammaster;
  1116.  
  1117.     edict_t        *mynoise;        // can go in client only
  1118.     edict_t        *mynoise2;
  1119.  
  1120.     int            noise_index;
  1121.     int            noise_index2;
  1122.     float        volume;
  1123.     float        attenuation;
  1124.  
  1125.     // timing variables
  1126.     float        wait;
  1127.     float        delay;            // before firing targets
  1128.     float        random;
  1129.  
  1130.     float        teleport_time;
  1131.  
  1132.     int            watertype;
  1133.     int            waterlevel;
  1134.  
  1135.     vec3_t        move_origin;
  1136.     vec3_t        move_angles;
  1137.  
  1138.     // move this to clientinfo?
  1139.     int            light_level;
  1140.  
  1141.     int            style;            // also used as areaportal number
  1142.  
  1143.     gitem_t        *item;            // for bonus items
  1144.  
  1145.     // common data blocks
  1146.     moveinfo_t        moveinfo;
  1147.     monsterinfo_t    monsterinfo;
  1148. };
  1149.  
  1150. //ZOID
  1151. #include "g_ctf.h"
  1152. //ZOID
  1153.  
  1154.